From 291ad17a226f345835906066cb027f097cedfe18 Mon Sep 17 00:00:00 2001 From: Chun-wei Fan Date: Fri, 11 Dec 2020 10:29:28 +0800 Subject: [PATCH] gdksurface-win32.c: Decouple mapped state from surface creation In line with what is done with the Wayland backend, enable the mapped state independently as needed from the toplevel surface presentation, and also enable the mapped state if necessary when presenting the popup surface. --- gdk/win32/gdksurface-win32.c | 42 ++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/gdk/win32/gdksurface-win32.c b/gdk/win32/gdksurface-win32.c index 4c6a5067a0..6b53b37d7f 100644 --- a/gdk/win32/gdksurface-win32.c +++ b/gdk/win32/gdksurface-win32.c @@ -1256,11 +1256,24 @@ gdk_win32_surface_layout_popup (GdkSurface *surface, } } +static void +maybe_notify_mapped (GdkSurface *surface) +{ + if (surface->destroyed) + return; + + if (!GDK_SURFACE_IS_MAPPED (surface)) + { + gdk_surface_set_is_mapped (surface, TRUE); + gdk_surface_invalidate_rect (surface, NULL); + } +} + static void show_popup (GdkSurface *surface) { gdk_win32_surface_raise (surface); - gdk_surface_set_is_mapped (surface, TRUE); + maybe_notify_mapped (surface); show_window_internal (surface, FALSE, FALSE); gdk_surface_invalidate_rect (surface, NULL); } @@ -4911,25 +4924,6 @@ gdk_win32_toplevel_class_init (GdkWin32ToplevelClass *class) gdk_toplevel_install_properties (object_class, 1); } -static void -show_surface (GdkSurface *surface) -{ - gboolean was_mapped; - - if (surface->destroyed) - return; - - was_mapped = GDK_SURFACE_IS_MAPPED (surface); - - if (!was_mapped) - gdk_surface_set_is_mapped (surface, TRUE); - - gdk_win32_surface_show (surface, FALSE); - - if (!was_mapped) - gdk_surface_invalidate_rect (surface, NULL); -} - static gboolean gdk_win32_toplevel_present (GdkToplevel *toplevel, GdkToplevelLayout *layout) @@ -4999,7 +4993,8 @@ gdk_win32_toplevel_present (GdkToplevel *toplevel, gdk_win32_surface_unfullscreen (surface); } - show_surface (surface); + gdk_win32_surface_show (surface, FALSE); + maybe_notify_mapped (surface); if (size.shadow.is_valid) { @@ -5093,8 +5088,9 @@ gdk_win32_drag_surface_present (GdkDragSurface *drag_surface, { GdkSurface *surface = GDK_SURFACE (drag_surface); - gdk_win32_surface_resize (surface, width, height); - show_surface (surface); + gdk_win32_surface_resize (surface, width, height); + gdk_win32_surface_show (surface, FALSE); + maybe_notify_mapped (surface); return TRUE; } -- 2.30.2